<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>ECMA测试</title>
  </head>
  <body>
    <script>
      //  1.  Javascript 的数据类型有几种？分别又有哪些类型？（5）
      // 简单数据类型 Number String  Null  Undefined  Boonlean Symboy NaN
      // 复杂数据类型 Object Function BigInt

      //  2.  return 有那两个作用？ 构造函数里return会怎么样？（5）
      // 1.终止函数 2.返回值
      // 构造函数里return 遇到原始数据类型 没用  遇到复杂数据类型 直接返回 return后的 数据

      //  3.  undefined 和 null 的区别？什么时候会得到undefined？（5）
      // undefined 是未定义   null 是声明初始化的时候用的
      // 1.如果一个变量 声明了但是未赋值就是undefined
      // 2.声明一个函数时 return undefined 时
      // 3.声明一个空对象时 得到得也是undefined

      //  4.  使用 continue 或 break 终止循环时，两种方式的区别是？（5）
      // continue 是跳过这段条件，继续执行下一个条件
      // break 是直接终止退出循环
      //  5.  如何判断字符串内是否包含指定字符？（5）
      // 用indexOf或者include判断
      // 假如 indexOf 不等于 -1 / include 为true时 那就说明这个字符串内有这个字符

      //  6. 值传递和引用传递的区别？ （5）
      // 值得传递是直接在栈里面赋值传递得
      // 引用传递是在堆里面开辟一个内存空间，然后在栈里面引用堆中得内存空间

      //  7. 请尽量列举出数组的方法,并注明其作用以及会不会修改原数组，至少10种（10）
      //  会修改原数组得方法
      // 1. push和pop 在数组得尾部添加或删除元素
      // 2.unshift 和 shift 在数组得头部添加或删除元素
      // 3.splite 一般用于复杂类型得数组得修改 添加 和删除
      // 4.sort 排序 a-b<0 从大到小  b-a<0  从小到大
      // 5.resver 翻转数组
      // 不会修改原数组得方法
      // 1.indexOf 和 include 查找数组
      // 2.find 高阶方法查找数组
      // 3.map 映射
      // 4.filter 过滤
      // 5.reduce 自增
      // 6.splice 截取
      // 7.concat 合并数组

      //  8.  请写出以下输出的结果和原因；（10）
      // var bar = true,
      //   number = 0;
      // console.log(bar + 0); // 1 true为1  1+0=1；
      // console.log(bar + 'xyz'); // truexyz 字符串加任何数据都会转换为字符串
      // console.log(bar + true); //2 true+true=1+1=2
      // console.log(+true); // 1 true为1
      // console.log(!'bluej'); // false
      // console.log(number++); // 0 先调用再自加
      // console.log(++number); // 2 先自加再调用
      // console.log(number); // 2 上面得number为2
      // 10 > 20 || console.log('haha'); //haha 遇真短路，遇假继续执行
      // 10 > 20 && console.log('haha'); // 打印为空 遇假短路
      //  9. 将多个数组进合并后再去重；对于去重的方案要求3种及以上（10）
      var arr1 = [1, 2, 3];
      var arr2 = [2, 3, 4, 5];
      var newArr = arr1.concat(arr2); //[1, 2, 3, 2, 3, 4, 5]
      // 方法一：
      // console.log([...new Set(newArr)]);
      // 方法二
      // newArr.sort(function (a, b) {
      //   return a - b;
      // });
      // for (var i = 0; i < newArr.length; i++) {
      //   if (newArr[i] === newArr[i + 1]) {
      //     newArr.splice(i, 1);
      //     i--;
      //   }
      // }
      // console.log(newArr);
      // 方法三
      // var res = [];
      // for (var i = 0; i < newArr.length; i++) {
      //   if (res.indexOf(newArr[i]) == -1) {
      //     res.push(newArr[i]);
      //   }
      // }
      // console.log(res);
      //10.将 str="再见，还会再见吗燕子，再见的时候你要幸福好不好，燕子你要开心，你要幸福，好不好，开心啊，幸福！你的世界以后没有我了，没关系你要幸福，🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊燕子，燕子，燕子，燕子，燕子，燕子，燕子你把我带走吧，燕子！"里面的所有"燕子"替换成"jack"不要用replaceAll(10)

      // var str =
      //   '再见，还会再见吗燕子，再见的时候你要幸福好不好，燕子你要开心，你要幸福，好不好，开心啊，幸福！你的世界以后没有我了，没关系你要幸福，🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊🚗~~ 🏃🏻~~燕子 🧎🏻燕子~~没有你我怎么活啊燕子，燕子，燕子，燕子，燕子，燕子，燕子你把我带走吧，燕子!';

      // for (var i = 0; i < str.length; i++) {
      //   if (str[i] == '燕') {
      //     str = str.replace(str[i], 'jack');
      //   }
      // }
      // console.log(str);

      //11. 找出数组中年龄小于18岁的女生(girl)的信息重新组成新的数组,并且将她们count变为现有的平方（10）
      var arr3 = [
        { name: '彭于晏', sex: 'boy', age: 18, count: 20 },
        { name: '迪丽热巴', sex: 'girl', age: 17, count: 30 },
        { name: '吴彦祖', sex: 'boy', age: 16, count: 40 },
        { name: '古力娜扎', sex: 'girl', age: 15, count: 50 },
        { name: '刘德华', sex: 'boy', age: 20, count: 60 },
        { name: '刘亦菲', sex: 'girl', age: 13, count: 70 },
        { name: '张学友', sex: 'boy', age: 14, count: 80 },
      ];
      // var newArr = [];
      // for (var i = 0; i < arr3.length; i++) {
      //   if (arr3[i].age < 18 && arr3[i].sex == 'girl') {
      //     newArr.push(arr3[i]);
      //   }
      // }
      // var res = newArr.map(function (item) {
      //   return item.count ** 2;
      // });
      // console.log(res);//[900, 2500, 4900]

      // 12. 统计字符串'abbcccddddd'中每个字符出现的次数，统计数组['a','b','b','c','c','c','d','d','d','d','d']中每个字符出现的次数(10分)
      // var str = 'abbcccddddd';
      // var obj = str.split('').reduce(function (prev, item) {
      //   prev[item] = prev[item] + 1 || 1;
      //   return prev;
      // }, {});
      // console.log(obj);//{a: 1, b: 2, c: 3, d: 5}
      // var arr = ['a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd', 'd'];
      // var objRes = arr.reduce(function (prev, item) {
      //   prev[item] = prev[item] + 1 || 1;
      //   return prev;
      // }, {});
      // console.log(objRes);//{a: 1, b: 2, c: 3, d: 5}
    </script>
  </body>
</html>
